/*
  流水线
  题目描述
    Gordon 的工厂需要生产 n 个产品，每个产品会在记录本上记录开始生产的时间 x 以及完成生产的时间 y。
    现在 Gordon 拿到这本记录本以后想知道最多有多少件产品同时在生产线上生产。
    注意：在同一时刻总是开始生产的产品先进入流水线。
  输入
    输入第一行只有一个整数 n，表示记录本上共记录了 n 件产品的信息。
    接下来 n 行，每行两个整数 x 和 y，表示一件产品开始生产的时间和完成生产的时间。
  输出
    输出仅有一行，该行只有一个整数，表示最多有多少件产品同时在生产线上生产。
  样例输入
    4
    2 6
    8 9
    1 5
    1 2
  样例输出
    3
  提示
    1 <= n <= 100000, 1 <= x <= y <= 10^8
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    /*
      说明:
        由于"开始生产的时间点"(x)和"完成生产的时间点"(y)的取值范围比较大 (1 ~ 10^8),
        生产的产品总数(n)的取值范围相对较小 (1 ~ 10^5),
        所以, 这里使用了 map 容器，而不是用数组! 以减少循环遍历的次数，避免运行时超时!
          map 容器的 "关键字"(first) 表示时间点,
          map 容器的 "值"(second) 表示该时间点生产产品的数量相对前一个时间点的差值(增量)
    */
    map <int, int> map_ni = {};
    int n;

    cin >> n;
    for (int i = 1; i <= n; i++) {
        int x, y;
        cin >> x >> y;
        map_ni[x] = map_ni[x] + 1; // 开始生产的时间点, 生产产品的数量相对前一个时间点 +1
        map_ni[y+1] = map_ni[y + 1] - 1; // 在完成生产的时间点的下一个时间点，生产产品的数量相对前一个时间点 -1
    }

    int num = 0;
    int maxn = 0;
    for (auto j = map_ni.begin(); j != map_ni.end(); j++) {
        int x = j -> second;
        num = num + x;
        maxn = max(maxn, num);
    }

    cout << maxn;

    return 0;
}